import { Leave } from '../models/Leave.js'

/**
 * 中间件：根据 params.id 加载 leave，并挂载到 req.leave
 */
export async function loadLeave(req, res, next) {
  try {
    const id = Number(req.params.id)
    if (!id) return res.status(404).json({ code: 404, message: '未找到' })

    const leave = await Leave.findByIdWithSteps(id)
    if (!leave) return res.status(404).json({ code: 404, message: '未找到' })

    req.leave = leave
    next()
  } catch (error) {
    next(error)
  }
}

/**
 * 中间件：确保当前用户是该请假单的学生或是管理员
 */
export function ensureStudentOwnsLeave(req, res, next) {
  const user = req.user || {}
  // 管理员拥有全部权限
  if (user.role === 'admin') return next()

  if (!req.leave) return res.status(404).json({ code: 404, message: '未找到' })
  if (Number(req.leave.student_id) !== Number(user.id))
    return res.status(403).json({ code: 403, message: 'Forbidden' })
  next()
}

/**
 * 中间件：确保当前用户可以审批该请假（教师或管理员，且状态为 pending）
 */
export function ensureCanApprove(req, res, next) {
  const user = req.user || {}
  if (user.role === 'admin') return next()
  if (user.role !== 'teacher') return res.status(403).json({ code: 403, message: 'Forbidden' })

  if (!req.leave) return res.status(404).json({ code: 404, message: '未找到' })
  if (req.leave.status !== 'pending')
    return res.status(409).json({ code: 409, message: '当前状态不可审批' })

  next()
}
